// 导入依赖包
import Path from "path";
import fs from "fs";
import Router from "koa-router";

// 创建路由实例
const router = new Router();

// 创建函数（用来扫描 controllers 目录的 js 文件）
function scanControllers() {
  // 获取根目录路径
  const path = Path.join(Path.resolve("./"), "controllers");

  // 获取目录文件（js）
  const files = fs.readdirSync(path).filter((file) => file.endsWith("js"));

  // 拼接完整路径
  const fullPath = files.map((file) => {
    return `file:///${Path.join(path, file)}`;
  });

  // 返回 js 文件路径
  return fullPath;
}

// 创建函数（注册对应的请求路径和处理路由）
async function registryRouters(controllersfullPath) {
  // 遍历控制器
  for (const controller of controllersfullPath) {
    // 导入控制文件;
    const controllerObj = await import(controller);
    // 控制器对象
    const obj = controllerObj.obj;
    for (const key in obj) {
      // 获取请求方法
      const requestMethod = key.split(" ")[0];
      // 获取请求路径
      const requestPath = key.split(" ")[1];
      // 获取请求函数
      const requestFn = obj[key];

      // 验证请求方式
      if (requestMethod.endsWith("get")) {
        // 处理 get 请求路由
        router.get(requestPath, requestFn);
      } else if (requestMethod.endsWith("post")) {
        // 处理 post 请求路由
        router.post(requestPath, requestFn);
      } else if (requestMethod.endsWith("put")) {
        // 处理 put 请求路由
        router.put(requestPath, requestFn);
      } else if (requestMethod.endsWith("delete")) {
        // 处理 delete 请求路由
        router.delete(requestPath, requestFn);
      }
    }
  }
}

// 使用注册路由函数（传入控制文件路径）
await registryRouters(scanControllers());

// 返回 异步函数
export default router.routes();
